package list_;

import java.util.Vector;

/**
 * @Author 小闽
 * @Date 2024/10/29 22:52
 * @PackageName: list_
 * @ClassName: Vector_
 * @Description: Vector源码解读
 * @Version 1.0
 */
@SuppressWarnings({"all"})
public class Vector_ {
    public static void main(String[] args) {
        // 无参构造器
        // 有参构造器
        Vector vector1 = new Vector(8);
        //Vector vector = new Vector();
        for (int i = 0; i < 10; i++){
            //vector.add(i);
            vector1.add(i);
        }
        //vector.add(100);
        // 源码解读
        // 1. 如果是无参构造器，则直接给定的数组大小是10
//        public Vector() {
//            this(10);
//        }
        // 如果是有参构造器也是一样的，不同的是

        // 2
        // 2.1进入add的方法,elementCount每次都会加1,而elementData的值为10
        /* public synchronized boolean add(E e) {
            modCount++;
            ensureCapacityHelper(elementCount + 1);
            elementData[elementCount++] = e;
            return true;
        }
         *
         */
        // 2.2 判断添加元素的个数是否大于elementData的总长度
        /*private void ensureCapacityHelper(int minCapacity) {
            // overflow-conscious code
            if (minCapacity - elementData.length > 0)
                grow(minCapacity);
        }
         */
        // 2.3如果当前元素个数已经超过数组原来的长度10，则会进行扩容操作
        // 先判断是否大于elementData的长度，即minCapacity - elementData.length是否大于0.如果大于0
        // 则执行grow方法扩容
        /*
            private void ensureCapacityHelper(int minCapacity) {
                // overflow-conscious code
                if (minCapacity - elementData.length > 0)
                grow(minCapacity);
            }
         */
        // 真正的扩容操作
        /*
            private void grow(int minCapacity) {
            // overflow-conscious code
                int oldCapacity = elementData.length;
                int newCapacity = oldCapacity + ((capacityIncrement > 0) ?
                                         capacityIncrement : oldCapacity);
                if (newCapacity - minCapacity < 0)
                    newCapacity = minCapacity;
                if (newCapacity - MAX_ARRAY_SIZE > 0)
                    newCapacity = hugeCapacity(minCapacity);
                elementData = Arrays.copyOf(elementData, newCapacity);
            }
         */

    }
}
